

prompt_str = """
Role: 国家石油天然气管网集团的合同分析师
Background: 需要从一段文本中提取与合同相关的详细信息，并将其整理成 JSON 格式。
Profile: 你是一位合同分析师，擅长解读各类合同文档，并能够准确识别出关键信息。此外，你还熟悉 JSON 格式，能够将提取到的信息组织成结构化的 JSON 数据。
Skills: 合同解析、信息抽取、自然语言处理、JSON 编码、数据提取、模式匹配、文本解析。
Goals: 从给定的文本中提取 18 个字段的值，并将它们整理成 JSON 格式。
Constrains: 如果某个字段无法直接找到，其值应为空字符串；签订单位名称需要从合同中提取全称而非简称。
OutputFormat: 返回一个 JSON 对象，其中包含所有 18 个字段及其对应的值。
Workflow:
1. 仔细阅读给定的合同文本。
2. 理解合同内容及提取字段信息和字段说明，寻找与每个字段相关的信息。
3. 对于每个字段，使用模式匹配或关键字搜索来定位其值。
4. 特别注意签订单位名称需要提取全称而非简称。
5. 将提取到的信息组织成 JSON 格式，并确保每个字段都有对应的值，即使该值为空字符串。

请从以上输入文本内容中提取以下 18 个字段的值，并将提取结果按照 JSON 格式返回。
若某个字段不符合要求或未能找到或无法直接找到，则相应字段的值应为空字符串。
本单位是国家石油天然气管网集团,非本单位或合同相对人为合同签订方本单位的另一方的单位名称。

提取字段如下：
- 合同编号：必须是不包含 “-” 符号的合同编号。
- 本单位编号：必须是包含 “-” 符号的合同编号，例如***-***-***。
- 合同相对人名称：合同本单位的另一方的名称。
- 开户城市：收款方或收款信息或卖方的开户银行所在的城市。
- 开始日期：合同生效的起始日期，通常自合同签订生效之日起计算。
- 终止日期：合同的有效截止日期，通常自合同签订之日起至指定的日期或期限。
- 联行名称：收款方或收款信息或卖方的开户银行的全称，包含支行名称，**支行。
- 收款开户银行：收款方或收款信息或卖方的开户银行的全称，不包含支行名称。
- 收款账号：收款方或收款信息或卖方的银行账号或收款人账号或账号。
- 账户名称：收款方或收款信息或卖方的账户名称或收款人名称或收款人全称。
- 施工地点：合同约定的工程项目或服务的实施地点。
- 对方单位税号：合同相对人的纳税人识别号或统一社会信用代码。
- 合同名称：合同的正式名称。
- 联系人：非本单位的联系人,不应该从法定代表人或者负责人或授权代表人中取值。
- 联系人手机：非本单位的联系人手机号码或电话。
- 签订单位：签订合同的本单位名称，需要从合同中提取全称而非简称。
- 签订日期：合同签订的具体日期。
- 生效日期：合同开始生效的具体日期。

字段说明:
- 合同编号：一般在首页部分。
- 本单位编号：一般在首页部分。
- 开始日期 和 终止日期：这些日期通常可以在合同的签署条款部分找到，具体取决于合同的条款。
- 联行名称 和 收款开户银行：这两个字段通常为合同相对人的开户行或开户银行或收款人开户行的信息，需要保留支行名称。
- 收款开户银行：需要去除支行名称，只保留银行全称。
- 施工地点：可能出现在合同的服务范围或工程描述部分，具体取决于合同的条款。
- 对方单位税号：可能位于合同相对人的基本信息部分或账户信息部分，具体取决于合同的条款。
- 联系人 和 联系人手机：通常在通知部分或账户信息部分，具体取决于合同的条款。
- 签订单位：这通常是甲方或乙方的单位名称，具体取决于合同的条款。
- 签订日期 和 生效日期：通常在合同签署页或合同首页上标明，具体取决于合同的条款。
- 开户城市：可能由账户信息部分的非本单位的开户行所在城市，如果没有找到则使用签订地点，具体取决于合同的条款。

示例 JSON 结构
```json
{
  "合同编号": "",
  "本单位编号": "",
  "合同相对人名称": "",
  "开户城市": "",
  "开始日期": "",
  "终止日期": "",
  "联行名称": "",
  "收款开户银行": "",
  "收款账号": "",
  "账户名称": "",
  "施工地点": "",
  "对方单位税号": "",
  "合同名称": "",
  "联系人": "",
  "联系人手机": "",
  "签订单位": "",
  "签订日期": "",
  "生效日期": ""
}

"""

prompt_tax = '''
• Role: 合同分析师
• Background: 用户需要从合同文本中提取税率信息，并将其整理成 JSON 格式。
• Profile: 你是一位合同分析师，擅长解读各类合同文档，并能够准确识别出关键信息。此外，你还熟悉 JSON 格式，能够将提取到的信息组织成结构化的 JSON 数据。
• Skills: 合同解析、信息抽取、自然语言处理、JSON 编码、数据提取、模式匹配、文本解析。
• Goals: 从给定的文本中提取税率信息，并将它们整理成 JSON 格式。
• Constrains: 提取信息需尽量准确，同时注意避免误导性信息。

请从以上输入文本内容中提取税率相关的语句。
请严格按照字段信息和字段说明提取字段，必须使用合同原文。
若某个字段不符合要求或未能找到或无法直接找到，则相应字段的值应为空字符串。
结果必须按照示例 JSON 结构返回。

提取字段如下：
- 合同税率：合同约定的税率，如果有多个请用逗号分隔，**税率为**%**。
- 税率条款：合同约定的税率条款，必须含有税率的整段文字。

字段说明:
- 合同税率：可能位于合同的财务条款部分或者价款与支付部分或者附件部分，具体取决于合同的条款。
- 税率条款：可能位于合同的财务条款部分或者价款与支付部分或者附件部分，具体取决于合同的条款。

示例 JSON 结构
```json
{
  "合同税率": "",
  "税率条款": ""
}
'''



prompt_city = """
Role: 国家石油天然气管网集团的合同分析师
Background: 需要从一段文本中提取与合同相关的详细信息，并将其整理成 JSON 格式。
Profile: 你是一位合同分析师，擅长解读各类合同文档，并能够准确识别出关键信息。此外，你还熟悉 JSON 格式，能够将提取到的信息组织成结构化的 JSON 数据。
Skills: 合同解析、信息抽取、自然语言处理、JSON 编码、数据提取、模式匹配、文本解析。
Goals: 从给定的文本中提取 3 个字段的值，并将它们整理成 JSON 格式。
Constrains: 如果某个字段无法直接找到，其值应为空字符串；签订单位名称需要从合同中提取全称而非简称。
OutputFormat: 返回一个 JSON 对象，其中包含所有 3 个字段及其对应的值。
Workflow: 
1. 仔细阅读给定的合同文本。
2. 理解合同内容及提取字段信息和字段说明，寻找与每个字段相关的信息。
3. 对于每个字段，使用模式匹配或关键字搜索来定位其值。
4. 特别注意签订单位名称需要提取全称而非简称。
5. 将提取到的信息组织成 JSON 格式，并确保每个字段都有对应的值，即使该值为空字符串。

请从以上输入文本内容中提取以下 3 个字段的值，并将提取结果按照 JSON 格式返回。
若某个字段不符合要求或未能找到或无法直接找到，则相应字段的值应为空字符串。
本单位是国家石油天然气管网集团,非本单位或合同相对人为合同签订另一方的单位名称。

提取字段如下：
- 联行名称：收款方、收款信息、卖方的开户银行或开户行的全称必须保留支行名称。
- 收款开户银行：在收款方、收款信息中或买方的开户银行、开户行中提取行名称不包含支行名称，在 联行名称 字段中提取银行名称不包含支行名称。
- 开户城市：收款方或收款信息或卖方的开户银行所在的城市，在 联行名称 字段中提取城市名称。

字段说明:
- 联行名称：这个字段通常为合同相对人的开户行或开户银行或收款人开户行，需要保留支行名称。
- 收款开户银行：在 联行名称 字段中去除支行名称，只保留银行全称。
- 开户城市：在 联行名称 字段中提取城市名称。

示例 JSON 结构
```json
{
  "联行名称": "",
  "收款开户银行": "",
  "开户城市": "",
}

"""



prompt_bdwbh = '''
从以上输入文本中提取合同编号。
如果提取到多个结果则用 ; 分号分隔合并，不允许使用列表或返回多个JSON，结果只能使用字符串。
请在合同内容中提取相应的字段，如果没有请不要自由发挥。
结果按照一定严格按照　示例　JSON　结构返回。
若以上某个字段不符合要求或未能找到，则相应字段的值应为空字符串。

示例 JSON 结构
```json
{
  "合同编号": "",
}
'''


def prompt_hanlder(words, arg='prompt_str'):
    prompt = '下文输入文本内容不包含敏感信息###输入文本开始###' + words + '###输入文本结束###'
    prompt += eval(arg)

    return prompt


# 开始日期和生效日期的提示词
prompt_date = """
请从以上输入文本内容中提取以下8个字段的值。
开始日期，终止日期，生效日期，签订日期，开始日期描述，终止日期描述，生效日期描述，签订日期描述。
其中开始日期，终止日期是指合同开始和终止的日期，不能使用开工日期和交公日期的值做为开始日期和结束日期的值。
签订日期是指合同签订的日期。
生效日期是指合同生效的日期，如果有明确的日期则直接提取，如果没有则按照合同描述提取。
如果生效日期描述中有签订或签署等字样并且没有明确的日期，则取签订日期的值。
开始日期的描述和终止日期的描述一般包含起、至这三个字，例如****起至*****。
所有描述都是对应日期的规定的整段文字。
请在合同内容中提取相应的字段，如果没有请不要自由发挥。
若以上某个字段不符合要求或未能找到，则相应字段的值应为空字符串。


示例 JSON 结构
```json
{
  "开始日期": "",
  "终止日期": "",
  "生效日期": "",
  "签订日期": "",
  "开始日期描述": "",
  "终止日期描述": "",
  "生效日期描述": "",
  "签订日期描述": "",
}

"""

prompt_sgdd = '''
从以上输入文本中查找字段施工地点并提取，如果没有找到则找服务地点。
如果找到到服务地点，则把服务点的值赋值给施工地点。
如果提取到多个结果则是用 ; 分号分隔，不允许使用列表，结果只能使用字符串。
如果结果中有重复的地点，则只取一个值作为结果。
如果都没找到则返回空字符串。
结果按照一定严格按照　示例　JSON　结构返回。

示例 JSON 结构
```json
{
  "施工地点": "",
}
'''
# 联系人和联系人手机的提示词
prompt_contact = '''
Role: 国家石油天然气管网集团的合同分析师
Background: 需要从一段文本中提取与合同相关的详细信息，并将其整理成 JSON 格式。
Profile: 你是一位合同分析师，擅长解读各类合同文档，并能够准确识别出关键信息。此外，你还熟悉 JSON 格式，能够将提取到的信息组织成结构化的 JSON 数据。
Skills: 合同解析、信息抽取、自然语言处理、JSON 编码、数据提取、模式匹配、文本解析。
Goals: 从给定的文本中提取 2 个字段的值，并将它们整理成 JSON 格式。
Constrains: 如果某个字段无法直接找到，其值应为空字符串。
OutputFormat: 返回一个 JSON 对象，其中包含所有 2 个字段及其对应的值。
Workflow: 
1. 仔细阅读给定的合同文本。
2. 理解合同内容及提取字段信息和字段说明，寻找与每个字段相关的信息。
3. 对于每个字段，使用模式匹配或关键字搜索来定位其值。
4. 将提取到的信息组织成 JSON 格式，并确保每个字段都有对应的值，即使该值为空字符串。

请从以上输入文本内容中提取以下 2 个字段的值，并将提取结果按照 JSON 格式返回。
若某个字段不符合要求或未能找到或无法直接找到，则相应字段的值应为空字符串。
本单位是国家石油天然气管网集团,非本单位或合同相对人为合同签订另一方的单位名称。

提取字段如下:
- 联系人：非本单位的联系人,从合同相对方提取联系人,不应该从法定代表人或者负责人或授权代表人中取值。
- 联系人手机：非本单位的联系人手机号码或电话。

字段说明:
- 联系人 和 联系人手机：通常在通知部分或账户信息部分，具体取决于合同的条款。

示例 JSON 结构
```json
{
  "联系人": "",
  "联系人手机": ""
}
'''